"use client"; import { claimActivityReward, ContinuousCfgItem, ContinuousListItem, ContinuousResult, ContinuousRewardItem, ContinuousStageItem, getContinuousRechargeInfo, } from "@/api/activity"; import CutDown from "@/components/CutDown"; import GlobalNotify from "@/components/ModalPopup/GlobalNotifyModal"; import { useRouter } from "@/i18n/routing"; import { formatAmount } from "@/utils/index"; import { Toast } from "antd-mobile"; import BigNumber from "bignumber.js"; import clsx from "clsx"; import { useTranslations } from "next-intl"; import { useSearchParams } from "next/navigation"; import React from "react"; import styles from "./page.module.scss"; interface Cfg1Item { text: string; text2: string; key: number; footer: string; footer2?: string; } interface StageItem extends ContinuousStageItem, Cfg1Item {} interface ListItem { dayId: number; data: ContinuousListItem; } interface RewardItem { dayId: number; data: ContinuousRewardItem[]; } //"#297fcf" const DayItem = ({ data, idx, onClaim, level, }: { data: ContinuousCfgItem; idx: number; onClaim: (data: ContinuousCfgItem) => void; level: string; }) => { const dayColor = React.useMemo(() => { return ["#12940f", "#297fcf", "#ec3920"][idx % 3]; }, [idx]); const doClaim = () => { if (onClaim && typeof onClaim === "function") { onClaim(data); } }; return (
{data.id >= 2 && (
Grande Prêmio Disponível
)} {!!data.end_at && (
)}
{data.days}
Recarga contínua por {data.days} dias
Recompensa de login {/* {level} */} {/* {data.target_reward}R */}
{data.is_sign === 0 ? "Recebido" : "Receber"}
); }; const Page = () => { const t = useTranslations(); const query = Object.fromEntries(useSearchParams()); const [data, setData] = React.useState({} as ContinuousResult); const router = useRouter(); const dayContainer = React.useRef(null); const [amount, setAmount] = React.useState({}); const [visible, setVisible] = React.useState(false); const act = React.useMemo(() => { if (!data || data.type === 11) return 0; return 1; }, [data]); React.useEffect(() => { getData(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const getData = async () => { const res = await getContinuousRechargeInfo({ activity_id: Number(query.activity_id) }); if (res.code === 200) { setData(res.data); } }; const cfg1: Record = React.useMemo(() => { return { 1: { text: "LOGIN ", text2: "PLATINUM", key: 1, footer: "Alcançou", }, 2: { text: "LOGIN", text2: "GOLD", key: 2, footer: "Ainda preciso", }, 3: { text: "LOGIN", text2: "DIAMANTE", key: 3, footer: "Ainda preciso", }, // 4: { // text: "ENTRAR NO", // text2: "MONOPOLY", // key: 4, // footer: "Ainda preciso", // }, // 5: { // text: "ENTRAR NO", // text2: "MONOPOLY", // key: 5, // footer: "Ainda preciso", // }, // 6: { // text: "ENTRAR NO", // text2: "MONOPOLY", // key: 6, // footer: "Ainda preciso", // }, // 7: { // text: "ENTRAR NO", // text2: "MONOPOLY", // key: 7, // footer: "Ainda preciso", // }, }; }, []); const stage = React.useMemo(() => { let stags = data?.list?.stage; if (!data?.list?.stage) { stags = [ { id: 1 }, { id: 2 }, { id: 3 }, // { id: 4 }, // { id: 5 }, // { id: 6 }, // { id: 7 }, ] as unknown as ContinuousStageItem[]; } const result: StageItem[] = stags .map((item) => { console.log(112233, item); return { ...item, ...cfg1[item.id], footer2: item.diff_num ? `${item.diff_num}R` : "", }; }) .sort((a: ContinuousStageItem, b: ContinuousStageItem) => a.id - b.id); return result; //[{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }, { id: 7 }]; }, [data?.list?.stage, cfg1]); const list = React.useMemo(() => { if (!data?.list?.list) { return []; } const result: ListItem[] = [] as ListItem[]; Object.keys(data?.list?.list).forEach((key: string) => { const item = data?.list?.list[key as any]; const key1 = Object.keys(item)[0]; result.push({ dayId: Number(key), data: item[key1 as any] }); }); console.log(result); return result.sort((a, b) => a.dayId - b.dayId); }, [data?.list?.list]); const reward_list = React.useMemo(() => { if (!data?.list?.reward_list) { return []; } const result: RewardItem[] = [] as RewardItem[]; Object.keys(data?.list?.reward_list).forEach((key: string) => { const item = data?.list?.reward_list[key as any]; const res2: ContinuousRewardItem[] = []; Object.keys(item).forEach((key2: string) => { const item2 = item[key2 as any]; res2.push(item2); }); result.push({ dayId: Number(key), data: res2 }); }); return result; }, [data?.list?.reward_list]); const waitList = React.useMemo(() => { if (!data?.list?.config_list) return []; const result = [] as ContinuousCfgItem[]; data?.list?.config_list.forEach((item) => { if ( item.is_sign === 0 || item.is_suss === 1 || !(item.start_at * 1000 < Date.now() && item.end_at * 1000 > Date.now()) ) { item.isCanClaim = false; } else { item.isCanClaim = true; } result.push(item); }); return result.sort((a, b) => a.days - b.days); }, [data?.list?.config_list]); const goDeposit = () => { router.push("/deposit"); }; const doClaim = async (data: ContinuousCfgItem) => { if (!query.activity_id) { Toast.show({ content: "Missing activity ID" }); return; } if (!data.is_sign) return; try { const res = await claimActivityReward({ activity_id: Number(query.activity_id), id: data.days, }); if (res.code === 200 && res?.data?.code === 1) { const amountObj: any = {}; if (res?.data?.reward) { res?.data?.reward.forEach((item: any) => { amountObj[`coin_${item.coin_type}`] = formatAmount(item.amount); }); } if (res?.data?.extra_reward) { res?.data?.extra_reward.forEach((item: any) => { amountObj[`coin_${item.coin_type}`] = formatAmount( new BigNumber(amountObj[`coin_${item.coin_type}`] || 0) .plus(item.amount) .toString() ); }); } setAmount(amountObj); setVisible(true); getData(); } else { throw new Error(t(`code.400`)); } } catch (error: any) { if (error) { Toast.show({ content: error.message || error.toString(), maskClickable: false, }); } } }; return (
{/*
RECARGA
*/}
Meu login
Login de amigo
{!!list?.length && (
{list.map((item, idx) => { return (
Para ser
concluído
recarga
{item.data.pay_num}
Dia {item.dayId}
); })}
)} {/* {!!list?.length && (
{list.map((item: any) => { return (
{item.dayId} dia
{item.dayId} dia
recarga
{item?.data?.pay_num}
); })}
)} */} {!!waitList.length && (
{act === 1 && (
AMIGO ENTRAR PARA
RECEBER CORTESIA
)} {act === 0 && (
ENTRAR E RECEBER CORTESIA
)}
{waitList.map((item, idx: number) => { return ( ); })}
)}
Dias de
depósito
Requisitos da
atividade
{data.type === 11 && (
Valor do
bônus
)} {data.type === 13 && (
Recompensas
de Agente
)}
{reward_list.map((item) => { return (
Recarga contínua por{" "}
{item.dayId}dias
{item.data.map((item2, idx) => { return (
Mais de {item2.target_num} por dia
{item2.target_reward}
); })}
); })}
Regras de Atividade
  • Jogadores que atendem aos requisitos podem receber o bônus diretamente.
  • Solicite o bônus desta promoção dentro do período promocional. Não se inscrever após o prazo limite será considerado como desistência automática.
  • Ao participar desta promoção, você concorda em cumprir as Regras e Termos da Promoção.
Termos e Condições
  • Todas as ofertas são liquidadas em RMB (CNY) e são baseadas no horário de Pequim.
  • Cada jogador, domicílio, endereço, endereço de e-mail, número de telefone, método de pagamento (mesmo cartão de débito/crédito/conta bancária) e endereço IP só pode aproveitar a oferta uma vez por dia.
  • Se for descoberto que qualquer grupo ou indivíduo está obtendo bônus desonestamente ou abusando de benefícios da empresa, a empresa reserva-se o direito de congelar ou cancelar o saldo do grupo.
  • A Ginkgo Live reserva-se o direito de interpretação final do evento; bem como o direito de modificar ou encerrar o evento sem aviso prévio.
setVisible(false)} deraction={5000} >
); }; export default Page;